//class Solution {
//public:
//    string path;
//    vector<string> ret;
//    vector<string> generateParenthesis(int n) {
//        dfs(n, 0, 0);
//        return ret;
//    }
//
//    void dfs(int n, int left, int right) {
//        if (right == n) {
//            ret.push_back(path);
//            return;
//        }
//
//        if (left < n) {
//            path += '(';
//            left++;
//            dfs(n, left, right);
//            path.pop_back();
//            left--;
//        }
//
//        if (right < left) {
//            path += ')';
//            right++;
//            dfs(n, left, right);
//            path.pop_back();
//            right--;
//        }
//    }
//};